import { defineStore } from 'pinia'
import service from '@/api/axios'
import { refreshTokenUrl } from '@/api/reqUrl'

export const userStore = defineStore({
    id: 'userStore', // id是唯一的，如果有多个文件，ID不能重复
    state: () => {
        return {
            token: '',
            refreshToken: '',
            userInfoData: {
                timestamp: ''
            }
        }
    },
    getters: {},
    actions: {
        saveToken(tokenObj) {
            const { token, refreshToken } = tokenObj
            this.token = token
            this.refreshToken = refreshToken
        },
        refreshTokenFun() {
            return service({
                url: refreshTokenUrl,
                method: 'post',
                data: {
                    refreshToken: this.refreshToken
                }
            })
        },
        saveUserInfo(userInfoData) {
            this.userInfoData = Object.assign({}, this.userInfoData, { ...userInfoData })
        },
        reset() {
            this.$reset() // 重置 store 状态
        }
    },
    // 开启数据缓存，在 strategies 里自定义 key 值，并将存放位置由 sessionStorage 改为 localStorage
    // 默认所有 state 都会进行缓存，你可以通过 paths 指定要持久化的字段，其他的则不会进行持久化，如：paths: ['userinfo'] 替换key的位置
    persist: {
        enabled: true,
        strategies: [
            {
                key: 'users',
                storage: localStorage,
                // 需要存储的 state 状态，默认存储所有的状态
                paths: ['token', 'refreshToken', 'userInfoData']
            }
        ]
    }
})
